#include <string>
#include "rose.h"

using namespace std;

#ifndef ARGUMENT_H
#define ARGUMENT_H

class Argument {
    public:
        Argument();
        virtual string typeStr();
        virtual int getOrder();
        Argument *getChild() { return child; }
        void setChild(Argument *arg) { child = arg; }
    protected:
        Argument *child;
};

class IntArgument : public Argument {
    public:
        IntArgument();
        string typeStr();
        int getOrder();
};

class PtrArgument : public Argument {
    public:
        PtrArgument();
        string typeStr();
        int getOrder();
};

class CharArgument : public Argument {
    public:
        CharArgument();
        string typeStr();
        int getOrder();
};

class StructArgument : public Argument {
    public:
        StructArgument(string set_name) { name = set_name; }
        string typeStr();
        int getOrder();
    private:
        string name;
};


Argument *translateArgs(SgType *type);

#endif
